From: Florian Müllner Date: Wed, 19 Jul 2017 00:29:16 +0000 (+0200) Subject: workspace: Move decision to show/hide chrome to clone X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~159 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=6816aea906036f883ccbd3f17deee0fcd5deb2b5;p=gnome-shell.git workspace: Move decision to show/hide chrome to clone Currently the chrome layer decides itself which events on the window clone should show or hide the chrome, which makes it harder to extent. Instead, move the decision to the window clone by letting it emit show/hide-chrome events when appropriate. https://bugzilla.gnome.org/show_bug.cgi?id=783953 --- diff --git a/js/ui/workspace.js b/js/ui/workspace.js index 888b21d66..4607f3981 100644 --- a/js/ui/workspace.js +++ b/js/ui/workspace.js @@ -157,6 +157,12 @@ var WindowClone = new Lang.Class({ this.actor.connect('destroy', Lang.bind(this, this._onDestroy)); this.actor.connect('key-press-event', Lang.bind(this, this._onKeyPress)); + this.actor.connect('enter-event', () => { this.emit('show-chrome'); }); + this.actor.connect('key-focus-in', () => { this.emit('show-chrome'); }); + + this.actor.connect('leave-event', () => { this.emit('hide-chrome'); }); + this.actor.connect('key-focus-out', () => { this.emit('hide-chrome'); }); + this._draggable = DND.makeDraggable(this.actor, { restoreOnSuccess: true, manualMode: true, @@ -454,14 +460,8 @@ var WindowOverlay = new Lang.Class({ button.connect('clicked', Lang.bind(this, this._closeWindow)); windowClone.actor.connect('destroy', Lang.bind(this, this._onDestroy)); - windowClone.actor.connect('enter-event', - Lang.bind(this, this._onEnter)); - windowClone.actor.connect('leave-event', - Lang.bind(this, this._onLeave)); - windowClone.actor.connect('key-focus-in', - Lang.bind(this, this._onEnter)); - windowClone.actor.connect('key-focus-out', - Lang.bind(this, this._onLeave)); + windowClone.connect('show-chrome', Lang.bind(this, this._onShowChrome)); + windowClone.connect('hide-chrome', Lang.bind(this, this._onHideChrome)); this._windowAddedId = 0; @@ -651,25 +651,23 @@ var WindowOverlay = new Lang.Class({ }); }, - _onEnter: function() { + _onShowChrome: function() { // We might get enter events on the clone while the overlay is // hidden, e.g. during animations, we ignore these events, // as the close button will be shown as needed when the overlays // are shown again if (this._hidden) - return Clutter.EVENT_PROPAGATE; + return; this._animateVisible(); this.emit('show-close-button'); - return Clutter.EVENT_PROPAGATE; }, - _onLeave: function() { + _onHideChrome: function() { if (this._idleToggleCloseId == 0) { this._idleToggleCloseId = Mainloop.timeout_add(750, Lang.bind(this, this._idleToggleCloseButton)); GLib.Source.set_name_by_id(this._idleToggleCloseId, '[gnome-shell] this._idleToggleCloseButton'); } - return Clutter.EVENT_PROPAGATE; }, _idleToggleCloseButton: function() {